package com.sunshine.lnuplusweb.utils;

import com.alibaba.fastjson.JSON;
import com.sunshine.lnuplusweb.vo.weather.WeatherVO;
import okhttp3.*;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class WeatherUtils {
//    //已经获取的天气列表
//    public static Map<String, WeatherBean> weatherBeanMap = new HashMap<>();

    //缓存天气，如果同一人频繁刷新也不会多次请求，而是会返回缓存天气，K:USER V:WEATHER
    private static Map<String, WeatherVO> weatherVOMap = new HashMap<>();

    public static WeatherVO getWeather(String userId) {
        if (weatherVOMap.containsKey(userId) && weatherVOMap.get(userId) != null) {
            weatherVOMap.get(userId);
            return weatherVOMap.get(userId);
        } else {
            getWeatherFromTianqiApi(userId);
            weatherVOMap.put(userId, new WeatherVO());
            return getWeather("not_login");
        }
    }

    private static void getWeatherFromTianqiApi(String userId) {
        String url = "https://www.tianqiapi.com/api?version=v6&appid=84958684&appsecret=gHjgc8wG";
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) {
                try {
                    weatherVOMap.put(userId, JSON.parseObject(Objects.requireNonNull(response.body()).string(), WeatherVO.class));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

///**
// * 一个天气实体类，用于存储天气信息
// * 当请求天气时，我们先从天气实体类列表中找这个地区的的天气
// * 如果找到则返回，如果没有找到则寻找，但是，天气是有时效性的
// * 在一定时间范围内，我们可以使用该列表中内容，时间过去后，我们便要重新获取天气
// */
//class WeatherBean {
//    //获取天气的时间
//    private Date getDate;
//
//    private Weather weather;
//
//    public Date getGetDate() {
//        return getDate;
//    }
//
//    public void setGetDate(Date getDate) {
//        this.getDate = getDate;
//    }
//
//    public Weather getWeather() {
//        return weather;
//    }
//
//    public void setWeather(Weather weather) {
//        this.weather = weather;
//    }
//}
